<?php

namespace App\Http\Controllers\Car;

use App\Models\CarModels\CarAccidentRecord;
use App\Models\CarModels\CarAccidentRecordFiles;
use App\Models\CarModels\CarFuelRecord;
use App\Models\CarModels\CarMaintenceFile;
use App\Models\SystemManagement\Employee;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
use Validator;
/**
 * @group 设备管理->任务管理->事故记录
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class CarAccidentRecordController extends Controller
{

    /**
     * 信息查看所有
     * @queryParam record_time  事故发生时间
     * @queryParam agency 事故处理机构
     * @queryParam address 发生地址
     * @queryParam detail 处理详情
     * @queryParam desc 事故原因
     * @queryParam car_id 所属车辆id
     * @queryParam staff_id 当事人
     * @queryParam record_id 经手人
     * @queryParam repair_address  维修地址
     * @queryParam repair_price  维修价格
     *
     * @bodyParam search string optional 车牌号
     * @bodyParam kind string optional 车型
     * @bodyParam user int optional 当事人
     */
    public function index(Request $request){
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        $query = CarAccidentRecord::with(['cars','staff','record','car']);
        $query->whereHas('cars',function ($q) use($request){
             $request->has('search') && $q->where('plates_number','like',"%{$request->get('search')}%");
              $request->has('kind') && $q->where('kinds_id', $request->get('kind'));
            })->where(function($q) use($request){
              $request->has('user') && $q->where('staff_id',$request->get('user'));
        });

        return response()->json(encodeMsg(pageQuery($query,$request),200),200);

    }

    /**
     * 事故记录添加
     *
     * @bodyParam record_time timestamp required  事故发生时间
     * @bodyParam agency string required  事故处理机构
     * @bodyParam address string required  发生地址
     * @bodyParam repair_address string optional  维修地址
     * @bodyParam repair_price float optional  维修价格
     * @bodyParam detail string optional  处理详情
     * @bodyParam desc string required  事故原因
     * @bodyParam car_id int required  所属车辆id
     * @bodyParam staff_id int optional  当事人
     * @bodyParam record_id int optional  经手人
     *
     * @queryParam record_time  事故发生时间
     * @queryParam agency 事故处理机构
     * @queryParam address 发生地址
     * @queryParam detail 处理详情
     * @queryParam desc 事故原因
     * @queryParam car_id 所属车辆id
     * @queryParam staff_id 当事人
     * @queryParam record_id 经手人
     * @queryParam repair_address  维修地址
     * @queryParam repair_price  维修价格
     *
     */
    public function store(Request $request){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $data=$request->all();
        try{
            if ($request->has('staff')){
                unset($data['staff']);
                $staff=Employee::where('name',$request->get('staff'))->first();
                if ($staff==null){
                    return response()->json(encodeMsg(["message"=>"没有对应当事人姓名"],500),500);
                }
                $data['staff_id']=$staff['id'];
            }
            if ($request->has('record')){
                unset($data['record']);
                $staff=Employee::where('name',$request->get('record'))->first();
                if ($staff==null){
                    return response()->json(encodeMsg(["message"=>"没有对应经手人姓名"],500),500);
                }
                $data['record_id']=$staff['id'];
            }
            $data=CarAccidentRecord::create($data);
            if($request->has('files')){
                $file_data = [];
                $fileArr = explode(',',$request->get('files'));
                foreach ($fileArr as $k=>$value){
                    $tmp = [];
                    $tmp['file_id'] = $value;
                    $tmp['f_id'] = $data->id;
                    array_push($file_data,$tmp);
                }
                try{
                    CarAccidentRecordFiles::insert($file_data);
                }catch (\Exception $e){
                    DB::rollBack();
                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加或者图片id是否重复"],404), 404);
                }
            }
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"数据添加出错"],400),400);
        }
    }

    /**
     * 事故记录显示(单个信息显示)
     *
     * @queryParam record_time 事故发生时间
     * @queryParam agency 事故处理机构
     * @queryParam address 发生地址
     * @queryParam detail 处理详情
     * @queryParam desc 事故原因
     * @queryParam car_id 所属车辆id
     * @queryParam staff_id 当事人
     * @queryParam record_id 经手人
     * @queryParam detail 维修详细信息
     * @queryParam repair_address  维修地址
     * @queryParam repair_price  维修价格
     *
     */
    public function show($pk){
        $data = CarAccidentRecord::with(['detail','staff','cars','record','car'])->find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该事故记录"],404),404);
        }else{
            return response()->json(encodeMsg($data,200),200);
        }
    }

    /**
     * 事故记录修改
     *
     * @bodyParam record_time timestamp optional  事故发生时间
     * @bodyParam agency string optional  事故处理机构
     * @bodyParam address string optional  发生地址
     * @bodyParam detail string optional  处理详情
     * @bodyParam desc string optional  事故原因
     * @bodyParam car_id int optional  所属车辆id
     * @bodyParam staff_id int optional  当事人
     * @bodyParam record_id int optional  经手人
     * @bodyParam repair_address string optional  维修地址
     * @bodyParam repair_price float optional  维修价格
     *
     * @queryParam record_time 事故发生时间
     * @queryParam agency 事故处理机构
     * @queryParam address 发生地址
     * @queryParam detail 处理详情
     * @queryParam desc 事故原因
     * @queryParam car_id 所属车辆id
     * @queryParam staff_id 当事人
     * @queryParam record_id 经手人
     * @queryParam repair_address  维修地址
     * @queryParam repair_price  维修价格
     *
     */
    public function update(Request $request, $pk){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        $carkind = CarAccidentRecord::find($pk);
        if($carkind == []){
            return response()->json(["message"=>"没有该事故记录"],404);
        }
        try {
            $carkind->update($request->all());
            return response()->json(encodeMsg($carkind,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"名字重复"],400),400);
        }
    }

    /**
     * 事故记录删除
     */

    public function destroy($pk){
        $data = CarAccidentRecord::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该事故记录"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}
